/* 验证工具类 */
export const check={
	empty(value){
		if(value==null || value==undefined){return true;}
		if(/^\s*$/.test(value)){return true;}
		return false;
	},
	url(url){
		if(/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/.test(url)){return true;}
		return false;
	},
	/**
	 * @description 验证手机号
	 * @param {Object} mobile
	 */
	mobile(mobile){
		if(/^1[2345789]\d{9}$/.test(mobile)){return true;}
		return false;
	},
	/**
	 * @description 验证昵称
	 * @param {Object} nickname
	 */
	nickName(nickname){
		if(/^[\u4e00-\u9fa5_a-zA-Z0-9_]{2,10}$/.test(nickname)){return true;}
		return false;
	},
	/**
	 * @description 验证密码
	 * @param {Object} pwd
	 */
	password(pwd){
		if(/^[a-zA-Z0-9]{5,12}$/.test(pwd)){return true;}
		return false;
	},
	/**
	 * @description 比较版本大小，如果新版本nv大于旧版本ov则返回true，否则返回false
	 * @param {Object} ov
	 * @param {Object} nv
	 */
	compareVersion(ov,nv){
		ov=ov+'';
		nv=nv+'';
		var ova = ov.split("."),nva = nv.split(".");
		var maxLength = Math.max(ova.length, nva.length);
		for (var i = 0; i < maxLength; i++) {
			var so = +ova[i] || 0,sn = +nva[i] || 0;
			if(sn > so){return true;}
			if(sn < so){return false;}
		}
		return false;
	}
}

/* 格式化工具类 */
export const format={
	/*
	 * 实时动态强制更改用户录入（默认保留2位小数点）
	 * 标签中调用：@input="amount(this,2)"
	 * input inputObject
	 */
	amount(value,fixed){
		if(arguments.length==1){//默认只有一个参数
			fixed=2;//则默认保留两位小数点
		}else{
			if(isNaN(fixed)){//非数字
				fixed=2;//则默认保留两位小数点
			}else{//是数字
				if(!(typeof fixed === 'number' && fixed%1 === 0)) fixed=2;//非整数，则默认保留两位小数点
			}
		}
		var regStrs = [
			['^0(\\d+)$', '$1'], //禁止录入整数部分两位以上，但首位为0
			['[^\\d\\.]+$', ''], //禁止录入任何非数字和点
			['\\.(\\d?)\\.+', '.$1'], //禁止录入两个以上的点
			['^(\\d+\\.\\d{'+fixed+'}).+', '$1'] //禁止录入小数点后fixed位以上	
		];
		
		for(var i=0; i<regStrs.length; i++){
			var reg = new RegExp(regStrs[i][0]);
			value = value.replace(reg, regStrs[i][1]);
		}
		if(value.substr(0,1)=='-' || value.substr(0,1)=='+'){
			value=value.substr(1,(value.length-1));
		}
		return value;
		//if(parseFloat(value)==0){return 0;}
		// if(fixed==0){
		// 	return parseInt(value);
		// }else{
		// 	return parseFloat(value);
		// }
	},
	/*
	 * 实时动态强制更改用户录入正负数字（默认保留2位小数点）
	 * 标签中调用：@input="amountAll(this,2)"
	 * input inputObject
	 */
	amountAll(value,fixed){
		if(arguments.length==1){//默认只有一个参数
			fixed=2;//则默认保留两位小数点
		}else{
			if(isNaN(fixed)){//非数字
				fixed=2;//则默认保留两位小数点
			}else{//是数字
				if(!(typeof fixed === 'number' && fixed%1 === 0)) fixed=2;//非整数，则默认保留两位小数点
			}
		}
		var regStrs = [
			['^0(\\d+)$', '$1'], //禁止录入整数部分两位以上，但首位为0
			['[^\\-?\\d.]+$', ''], //禁止录入任何非数字和点
			['\\.(\\-?\\d?)\\.+', '.$1'], //禁止录入两个以上的点
			['^(\\-?\\d+\\.\\d{'+fixed+'}).+', '$1'] //禁止录入小数点后fixed位以上	
		];
		for(var i=0; i<regStrs.length; i++){
			var reg = new RegExp(regStrs[i][0]);
			value = value.replace(reg, regStrs[i][1]);
		}
		return value;
	},
	/**
	 * @description 去掉字符串中的回车换行
	 * @param {Object} str 待格式化字符串
	 */
	removeStrEnter(str){
		return str.replace(/[\r\n]/g,"");
	},
	/**
	 * @description 格式化金额，大于一万时格式化为以万元计算,小于一万是以正常格式输入
	 * @param {Object} price
	 */
	priceForW(price){
		price=parseFloat(price);
		if(price>=10000 || price<=-10000){
			var price1=parseFloat(price.toFixed(0));//大于一万则去正数,取消小数点后面的数字
			price1=price1.acdivide(10000);
			price1=price1.toFixed(0);
			return price1+'万元';
		}else{
			return price.toFixed(0)+'元';
		}
	},
	/**
	 * @description 格式化金额1000变成1,000
	 * @param {Object} value 待格式化金额
	 */
	toThousands(value) {
		let numStr = (value || 0).toString();
		return numStr.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
	},
	/**
	 * @description 格式化手机号码 3,4,4格式
	 * @param {Object} mobile
	 */
	mobile344(mobile){
		if(mobile.length==11){
			return mobile.substr(0,3)+' '+mobile.substr(3,4)+' '+mobile.substr(7,4);
		}else{
			return mobile;
		}
	},
	/**
	 * @description 格式化银行卡号 每4位一个空格，隔开显示
	 * @param {Object} bankCode
	 */
	bankCode4(bankCode){
		return bankCode.replace(/[\s]/g, '').replace(/(\d{4})(?=\d)/g, "$1 ");
	}
}

/* json工具类 */
export const json={
	/**
	 * @description 判断json是否为空
	 * @param {Object} json
	 */
	isNullOrEmpty(json){
		if(!json) return true;
		var t;
		for (t in json)
			return !1;
		return !0
	},
	/**
	 * @description json数组中是否存在健名对应的值(普通没有子的对象数组)
	 * @param {Object} jsonArray
	 * @param {Object} keyName
	 * @param {Object} keyValue
	 */
	getJsonValueByKey(jsonArray,keyName,keyValue){
		var map = {}; //创建一个空的json对象
		for(var i = 0; i < jsonArray.length; i++) {
			var value = jsonArray[i]; //将数组中的元素作为json对象的值
			map[''+value[''+keyName+'']+'']= value;
		}
		return map[''+keyValue+''];
	},
	/**
	 * @description 合并json对象
	 * @param {Object} json1
	 * @param {Object} json2
	 */
	mergeJson(json1, json2){
		var resultJsonObject={};
		for(var attr in json1){
			resultJsonObject[attr]=json1[attr];
		}
		for(var attr in json2){
			resultJsonObject[attr]=json2[attr];
		}
		//resultJsonObject=JSON.parse((JSON.stringify(json1)+JSON.stringify(json2)).replace(/}{/,','));
		return resultJsonObject;
	}
}

/* 有关日期时间的工具类 */
export const date={
	parse(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串，转化为一个Date对象
		try{
			var a = str.split(/[^0-9]/);
			return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
		}catch(e){
			return new Date();
		}
		
	},
	/**
	 * @description 人性化时间格式
	 * @param {DataTime} shorttime 指定的时间戳
	 */
	gettime(shorttime){
		shorttime=shorttime.toString().length<13 ? shorttime*1000 : shorttime;
		let now = (new Date()).getTime();
		let cha = (now-parseInt(shorttime))/1000;
		if (cha < 43200) {
			// 当天
			return this.dateFormat(new Date(shorttime),"{A} {t}:{ii}");
		} else if(cha < 518400){
			// 隔天 显示日期+时间
			return this.dateFormat(new Date(shorttime),"{Mon}月{DD}日 {A} {t}:{ii}");
		} else {
			// 隔年 显示完整日期+时间
			return this.dateFormat(new Date(shorttime),"{Y}-{MM}-{DD} {A} {t}:{ii}");
		}
	},
	/**
	 * @description 计算指定时间与当前的时间差
	 * @param {DateTime} data 指定的时间
	 */
	sumAge(data){
		let dateBegin = new Date(data.replace(/-/g, "/"));
		let dateEnd = new Date();//获取当前时间
		let dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
		let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
		let leave1=dateDiff%(24*3600*1000)    //计算天数后剩余的毫秒数
		let hours=Math.floor(leave1/(3600*1000))//计算出小时数
		//计算相差分钟数
		let leave2=leave1%(3600*1000)    //计算小时数后剩余的毫秒数
		let minutes=Math.floor(leave2/(60*1000))//计算相差分钟数
		//计算相差秒数
		let leave3=leave2%(60*1000)      //计算分钟数后剩余的毫秒数
		let seconds=Math.round(leave3/1000)
		return dayDiff+"天 "+hours+"小时 ";
	},
	/**
	 * @description 获取聊天时间（相差300s内的信息不会显示时间）
	 * @param {Object} v1
	 * @param {Object} v2
	 */
	getChatTime(v1,v2){
		v1=v1.toString().length<13 ? v1*1000 : v1;
		v2=v2.toString().length<13 ? v2*1000 : v2;
		if(((parseInt(v1)-parseInt(v2))/1000) > 300){
			return this.gettime(v1);
		}
	},
	/**
	 * @description 获取年龄
	 * @param {Object} data
	 */
	getAgeByBirthday(data){
		let birthday=new Date(data.replace(/-/g, "\/")); 
		let d=new Date(); 
		return d.getFullYear()-birthday.getFullYear()-((d.getMonth()<birthday.getMonth()|| d.getMonth()==birthday.getMonth() && d.getDate()<birthday.getDate())?1:0);
	},
	/**
	 * @description 计算当前日期星座
	 * @param {Date} date 日期
	 */
	getHoroscope(date) {
	  let c = ['摩羯','水瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天秤','天蝎','射手','摩羯']
	  date=new Date(date);
	  let month = date.getMonth() + 1;
	  let day = date.getDate();
	  let startMonth = month - (day - 14 < '865778999988'.charAt(month));
	  return c[startMonth]+'座';
	}
}

